package cn.ffcs.util.converter;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.TimeZone;

/**
 * 日期工具类
 * 
 * @author yedw
 *
 */
public class DateUtil {
	
	//日期格式，年份，例如：2008
    public static final String DATE_FORMAT_YYYY = "yyyy";
    
    //日期格式，年份和月份，例如：200810
    public static final String DATE_FORMAT_YYYYMM = "yyyyMM";
    
    //日期格式，年月日，例如：20081020
    public static final String DATE_FORMAT_YYYYMMDD = "yyyyMMdd";
    
    //日期格式，年月日，用横杠分开，例如：2008-10-20
    public static final String DATE_FORMAT_YYYY_MM_DD = "yyyy-MM-dd";
    
    //日期格式，年月日时分秒，例如：20081020200808
    public static final String DATE_TIME_FORMAT_YYYYMMDDHHMISS = "yyyyMMddHHmmss";
    
    //日期格式，年月日时分秒，年月日用横杠分开，时分秒用冒号分开，
    //例如：2008-10-20 20:08:08
    public static final String DATE_TIME_FORMAT_YYYY_MM_DD_HH_MI_SS = "yyyy-MM-dd HH:mm:ss";
    
    /**
    * 字符串转换为日期
    * @param strDate 日期的字符串形式
    * @param format 转换格式
    * @return String 转换后的日期字符串
    */
    public static Date strToDate(String strDate, String format){
        SimpleDateFormat dateFormat = new SimpleDateFormat(format);
        dateFormat.setTimeZone(TimeZone.getTimeZone("GMT+8"));
        Date date = null;
        try{
            date = dateFormat.parse(strDate);
        }catch(ParseException e){
            e.printStackTrace();
        }
        return date;
    }

    /**
    * 字符串转换为日期
    * @param strDateTime 日期时间的字符串形式
    * @param format 转换格式
    * @return Date 转换后的日期
    */
    public static Date strToDateTime(String strDateTime, String format){
        SimpleDateFormat dateTimeFormat = new SimpleDateFormat(format);
        dateTimeFormat.setTimeZone(TimeZone.getTimeZone("GMT+8"));
        Date dateTime = null;
        try{
          dateTime = dateTimeFormat.parse(strDateTime);
        }catch(ParseException e){
            e.printStackTrace();
        }
        return dateTime;
    }

    /**
    * 日期转换为字符串
    * @param date 需要转换的日期
    * @param format 转换格式
    * @return String 转换后的日期字符串
    */
    public static String dateToStr(Date date, String format){
        SimpleDateFormat dateFormat = new SimpleDateFormat(format);
        dateFormat.setTimeZone(TimeZone.getTimeZone("GMT+8"));
        return dateFormat.format(date);
    }

    /**
    * 日期时间转换为字符串
    * @param date 需要转换的日期
    * @param format 转换格式
    * @return String 转换后的日期字符串
    */    
    public static String dateTimeToStr(Date date, String format){
        SimpleDateFormat dateTimeFormat = new SimpleDateFormat(format); 
        dateTimeFormat.setTimeZone(TimeZone.getTimeZone("GMT+8"));
        return dateTimeFormat.format(date);
    }
    
    /**
    * 得到当天的最后时间,today是字符串类型"yyyy-mm-dd",
    * 返回是日期类型"yyyy-mm-dd 23:59:59"
    * @param today 当天日期
    * @return Date 返回当天的最后时间
    */    
    public static Date getTodayLastTime(String today){
        String todayLastTime = today + " 23:59:59";
        return strToDateTime(todayLastTime,DateUtil.DATE_TIME_FORMAT_YYYY_MM_DD_HH_MI_SS);        
    } 
    public static Date getMaxDate(){
    	return DateUtil.strToDate("2280-12-12", "yyyy-MM-dd");
    }
    
}
